// 路由中间件的使用基本步骤
const express = require('express');


// 定义路由中间件对象（本质上是一个中间件函数）
// router --> (req,res,next)=>{}
let router = express.Router();

// 给路由注册get和post方法进行逻辑处理
// 这个方法一定要判断token的合法性，如果不合法，则响应401，否则进入正常处理逻辑？
// 解决方案：验证token的合法性我们使用express-jwt这个包
router.get('/getHeroList', (req, res) => {
    // res.execSql('select * from heros', (err, result) => {
    //     res.send({ code: 200, msg: '', data: result });
    // })

    // 1.0 处理参数
    let { heroName } = req.query;

    // 2.0 处理响应
    // 2.1 构造sql语句
    let sql = ` select * from heros `;
    if (heroName) {
        sql += ` where name = '${heroName}' `;
    }

    // 2.2 执行sql语句响应结果
    res.execSql(sql, (err, results) => {
        if (err) {
            return res.send({ code: 500, msg: err.message });
        }

        // 成功处理
        res.send({ code: 200, msg: "获取数据ok", data: results });
    })

})

// 2.0 添加英雄
router.post('/addHero', (req, res) => {
    // 1.0 处理参数
    let { name, gender, img } = req.body;

    // 1.1 判断name不能为空
    if (!name) {
        return res.send({ code: 201, msg: 'name参数值不能为空' });
    }

    // 2.0 处理响应
    let sql = `insert into heros(name,gender,img,isdelete) values('${name}','${gender}','${img}',0)`;
    res.execSql(sql, (err, results) => {
        if (err) {
            return res.send({ code: 500, msg: err.message });
        }
        // 成功
        res.send({ code: 200, msg: '数据添加成功' });
    })
})

// 3.0 上传头像功能接口
const multer = require('multer');
const path = require('path');
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads')
    },
    filename: function (req, file, cb) {
        const filename = Date.now() + '-' + Math.round(Math.random() * 1E9) + path.extname(file.originalname);
        cb(null, filename)
    }
})
const upload = multer({ storage: storage });
router.post('/uploadFile', upload.single('file_data'), (req, res) => {
    res.send({ code: 200, msg: 'ok', src: '/' + req.file.path })
});

// 4.0 更新英雄头像数据接口
router.post('/updateHero', (req, res) => {
    // 1.0 参数处理
    let { id, name, gender, img } = req.body;
    if (!name && !gender && !img) {
        return res.send({ code: 201, msg: 'name和gender和img至少有一个要传入' });
    }

    // 2.0 响应处理
    let sql = ` update heros set  `;
    let setArr = [];
    if (name) {
        setArr.push(` name = '${name}' `);
        // sql += ` name = '${name}' , `;
    }
    if (gender) {
        setArr.push(` gender = '${gender}' `);
        // sql += ` gender = '${gender}', `;
    }
    if (img) {
        setArr.push(` img = '${img}' `);
        // sql += ` img = '${img}' `;
    }
    sql += setArr.join(',');

    sql += `  where id = ${id} `;

    // 执行和响应sql
    res.execSql(sql, (error, results) => {
        if (error) {
            return res.send({ code: 500, msg: error.message });
        }

        // 更新成功响应
        res.send({ code: 200, msg: "更新成功" });
    })

})

// 根据id删除英雄数据
router.get('/delHeroById/:id', (req, res) => {
    // 1.0 获取参数
    let { id } = req.params;
    // 如果id不是一个数组，则响应201
    if (isNaN(id)) {
        return res.send({ code: 201, msg: 'id参数必须是一个数字' });
    }

    // 2.0 删除数据响应处理
    // 构造sql语句
    let sql = ` delete from heros where id = ${id} `;
    res.execSql(sql, (error, result) => {
        if (error) {
            return res.send({ code: 500, msg: error.message });
        }

        // 删除成功
        res.send({ code: 200, msg: `删除id=${id}数据成功` });
    })
})


// 导出
module.exports = router;